Amazon Linux2 から pg_dump で RDS for PostgreSQL のダンプ作成時にハマったので調べてみた
こんにちは!コンサル部のinomaso(@inomasosan)です。
Amazon Linux2からpg_dumpを使用してRDS for PostgreSQLのダンプ作成時に、pg_dumpのバージョンエラーとなってしまったので、解決策を検証してみました。
検証環境
項目 | バージョン |
---|---|
Amazon Linux2 | amzn2-ami-kernel-5.10-hvm-2.0.20211201.0-x86_64-gp2 |
pg_dump | 9.2.24 |
PostgreSQL | 13.4 |
エラー事象
Amazon Linux2の標準リポジトリでpg_dumpを含むpostgresql.x86_64
インストールし、RDS for PostgreSQLのダンプ作成時に以下のようなエラーメッセージが出力されました。
pg_dump: サーババージョン: 13.4、pg_dump バージョン: 9.2.24 pg_dump: サーババージョンの不整合のため処理を中断しています
原因
pg_dumpとRDS for PostgreSQLのバージョンが大きく異なっていたために発生したエラーでした。 解決するためには、基本的にpg_dumpが含まれるPostgreSQLクライアント側をバージョンアップする必要があります。
PostgreSQLクライアントのバージョンアップ
前提
今回は検証ではバージョン依存を考慮する必要がない前提とし、yumでpostgresql13.x86_64
をインストールしていきます。
既存環境に影響を与えたくない場合は、以下のブログが参考になるかと思います。
PostgreSQLクライアントの古いパッケージ削除
古いpostgresql
パッケージをインストール済みの場合は削除します。
$ sudo yum -y remove postgresql.x86_64 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ postgresql.x86_64 0:9.2.24-6.amzn2 を 削除 --> 依存性解決を終了しました。 amzn2-core/2/x86_64 | 3.7 kB 00:00:00 依存性を解決しました ==================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ==================================================================================================== 削除中: postgresql x86_64 9.2.24-6.amzn2 @amzn2-core 16 M トランザクションの要約 ==================================================================================================== 削除 1 パッケージ インストール容量: 16 M Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 削除中 : postgresql-9.2.24-6.amzn2.x86_64 1/1 検証中 : postgresql-9.2.24-6.amzn2.x86_64 1/1 削除しました: postgresql.x86_64 0:9.2.24-6.amzn2 完了しました!
リポジトリ追加
PGDGリポジトリ(PostgreSQL開発元のYumリポジトリ)は、一部のパッケージがExtra Packages for Enterprise Linux (EPEL)に依存しているため、EPELリポジトリと一緒に有効化します。
EPELリポジトリ有効化
Amazon Linux2の場合Amazon Linux Extrasを利用することで、簡単にEPELリポジトリを利用できるようになります。
$ sudo amazon-linux-extras install -y epel Installing epel-release 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd リポジトリーを清掃しています: amzn2-core amzn2extra-docker amzn2extra-epel amzn2extra-kernel-5.10 17 個の metadata ファイルを削除しました 6 個の sqlite ファイルを削除しました 0 個の metadata ファイルを削除しました 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 amzn2extra-docker | 3.0 kB 00:00:00 amzn2extra-epel | 3.0 kB 00:00:00 amzn2extra-kernel-5.10 | 3.0 kB 00:00:00 (1/9): amzn2-core/2/x86_64/group_gz | 2.5 kB 00:00:00 (2/9): amzn2-core/2/x86_64/updateinfo | 424 kB 00:00:00 (3/9): amzn2extra-epel/2/x86_64/primary_db | 1.8 kB 00:00:00 (4/9): amzn2extra-kernel-5.10/2/x86_64/updateinfo | 76 B 00:00:00 (5/9): amzn2extra-docker/2/x86_64/updateinfo | 4.7 kB 00:00:00 (6/9): amzn2extra-epel/2/x86_64/updateinfo | 76 B 00:00:00 (7/9): amzn2extra-docker/2/x86_64/primary_db | 86 kB 00:00:00 (8/9): amzn2extra-kernel-5.10/2/x86_64/primary_db | 5.3 MB 00:00:00 (9/9): amzn2-core/2/x86_64/primary_db | 58 MB 00:00:00 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ epel-release.noarch 0:7-11 を インストール --> 依存性解決を終了しました。 依存性を解決しました ==================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ==================================================================================================== インストール中: epel-release noarch 7-11 amzn2extra-epel 15 k トランザクションの要約 ==================================================================================================== インストール 1 パッケージ 総ダウンロード容量: 15 k インストール容量: 24 k Downloading packages: epel-release-7-11.noarch.rpm | 15 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : epel-release-7-11.noarch 1/1 検証中 : epel-release-7-11.noarch 1/1 インストール: epel-release.noarch 0:7-11 完了しました! 0 ansible2 available \ [ =2.4.2 =2.4.6 =2.8 =stable ] 2 httpd_modules available [ =1.0 =stable ] 3 memcached1.5 available \ [ =1.5.1 =1.5.16 =1.5.17 ] 5 postgresql9.6 available \ [ =9.6.6 =9.6.8 =stable ] 6 postgresql10 available [ =10 =stable ] 9 R3.4 available [ =3.4.3 =stable ] 10 rust1 available \ [ =1.22.1 =1.26.0 =1.26.1 =1.27.2 =1.31.0 =1.38.0 =stable ] 11 vim available [ =8.0 =stable ] 15 php7.2 available \ [ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 =7.2.13 =7.2.14 =7.2.16 =7.2.17 =7.2.19 =7.2.21 =7.2.22 =7.2.23 =7.2.24 =7.2.26 =stable ] 17 lamp-mariadb10.2-php7.2 available \ [ =10.2.10_7.2.0 =10.2.10_7.2.4 =10.2.10_7.2.5 =10.2.10_7.2.8 =10.2.10_7.2.11 =10.2.10_7.2.13 =10.2.10_7.2.14 =10.2.10_7.2.16 =10.2.10_7.2.17 =10.2.10_7.2.19 =10.2.10_7.2.22 =10.2.10_7.2.23 =10.2.10_7.2.24 =stable ] 18 libreoffice available \ [ =5.0.6.2_15 =5.3.6.1 =stable ] 19 gimp available [ =2.8.22 ] 20 docker=latest enabled \ [ =17.12.1 =18.03.1 =18.06.1 =18.09.9 =stable ] 21 mate-desktop1.x available \ [ =1.19.0 =1.20.0 =stable ] 22 GraphicsMagick1.3 available \ [ =1.3.29 =1.3.32 =1.3.34 =stable ] 23 tomcat8.5 available \ [ =8.5.31 =8.5.32 =8.5.38 =8.5.40 =8.5.42 =8.5.50 =stable ] 24 epel=latest enabled [ =7.11 =stable ] 25 testing available [ =1.0 =stable ] 26 ecs available [ =stable ] 27 corretto8 available \ [ =1.8.0_192 =1.8.0_202 =1.8.0_212 =1.8.0_222 =1.8.0_232 =1.8.0_242 =stable ] 28 firecracker available [ =0.11 =stable ] 29 golang1.11 available \ [ =1.11.3 =1.11.11 =1.11.13 =stable ] 30 squid4 available [ =4 =stable ] 31 php7.3 available \ [ =7.3.2 =7.3.3 =7.3.4 =7.3.6 =7.3.8 =7.3.9 =7.3.10 =7.3.11 =7.3.13 =stable ] 32 lustre2.10 available \ [ =2.10.5 =2.10.8 =stable ] 33 java-openjdk11 available [ =11 =stable ] 34 lynis available [ =stable ] 35 kernel-ng available [ =stable ] 36 BCC available [ =0.x =stable ] 37 mono available [ =5.x =stable ] 38 nginx1 available [ =stable ] 39 ruby2.6 available [ =2.6 =stable ] 40 mock available [ =stable ] 41 postgresql11 available [ =11 =stable ] 42 php7.4 available [ =stable ] 43 livepatch available [ =stable ] 44 python3.8 available [ =stable ] 45 haproxy2 available [ =stable ] 46 collectd available [ =stable ] 47 aws-nitro-enclaves-cli available [ =stable ] 48 R4 available [ =stable ] _ kernel-5.4 available [ =stable ] 50 selinux-ng available [ =stable ] 51 php8.0 available [ =stable ] 52 tomcat9 available [ =stable ] 53 unbound1.13 available [ =stable ] 54 mariadb10.5 available [ =stable ] 55 kernel-5.10=latest enabled [ =stable ] 56 redis6 available [ =stable ] 57 ruby3.0 available [ =stable ] 58 postgresql12 available [ =stable ] 59 postgresql13 available [ =stable ] 60 mock2 available [ =stable ] 61 dnsmasq2.85 available [ =stable ]
PGDGリポジトリ有効化
PostgreSQL13用のリポジトリを有効化します。
$ sudo tee /etc/yum.repos.d/pgdg.repo<<EOF > [pgdg13] > name=PostgreSQL 13 for RHEL/CentOS 7 - x86_64 > baseurl=http://download.postgresql.org/pub/repos/yum/13/redhat/rhel-7-x86_64 > enabled=1 > gpgcheck=0 > EOF [pgdg13] name=PostgreSQL 13 for RHEL/CentOS 7 - x86_64 baseurl=http://download.postgresql.org/pub/repos/yum/13/redhat/rhel-7-x86_64 enabled=1 gpgcheck=0
PostgreSQL13用クライアントをインストール
PostgreSQL13のパッケージをインストールできるか確認します。
$ sudo yum search postgresql13 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd 210 packages excluded due to repository priority protections ==================================== N/S matched: postgresql13 ===================================== postgresql13.x86_64 : PostgreSQL client programs and libraries postgresql13-contrib.x86_64 : Contributed source and binaries distributed with PostgreSQL postgresql13-devel.x86_64 : PostgreSQL development header files and libraries postgresql13-docs.x86_64 : Extra documentation for PostgreSQL postgresql13-libs.x86_64 : The shared libraries required for any PostgreSQL clients postgresql13-llvmjit.x86_64 : Just-in-time compilation support for PostgreSQL postgresql13-odbc.x86_64 : PostgreSQL ODBC driver postgresql13-plperl.x86_64 : The Perl procedural language for PostgreSQL postgresql13-plpython3.x86_64 : The Python3 procedural language for PostgreSQL postgresql13-pltcl.x86_64 : The Tcl procedural language for PostgreSQL postgresql13-server.x86_64 : The programs needed to create and run a PostgreSQL server postgresql13-test.x86_64 : The test suite distributed with PostgreSQL Name and summary matches only, use "search all" for everything.
PostgreSQL13のクライアント用パッケージをインストールします。
$ sudo yum -y install postgresql13.x86_64 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd amzn2-core | 3.7 kB 00:00:00 210 packages excluded due to repository priority protections 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ postgresql13.x86_64 0:13.5-1PGDG.rhel7 を インストール --> 依存性の処理をしています: postgresql13-libs(x86-64) = 13.5-1PGDG.rhel7 のパッケージ: postgresql13-13.5-1PGDG.rhel7.x86_64 --> トランザクションの確認を実行しています。 ---> パッケージ postgresql13-libs.x86_64 0:13.5-1PGDG.rhel7 を インストール --> 依存性解決を終了しました。 依存性を解決しました ==================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ==================================================================================================== インストール中: postgresql13 x86_64 13.5-1PGDG.rhel7 pgdg13 1.4 M 依存性関連でのインストールをします: postgresql13-libs x86_64 13.5-1PGDG.rhel7 pgdg13 381 k トランザクションの要約 ==================================================================================================== インストール 1 パッケージ (+1 個の依存関係のパッケージ) 総ダウンロード容量: 1.8 M インストール容量: 8.8 M Downloading packages: (1/2): postgresql13-libs-13.5-1PGDG.rhel7.x86_64.rpm | 381 kB 00:00:02 (2/2): postgresql13-13.5-1PGDG.rhel7.x86_64.rpm | 1.4 MB 00:00:02 ---------------------------------------------------------------------------------------------------- 合計 806 kB/s | 1.8 MB 00:00:02 Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : postgresql13-libs-13.5-1PGDG.rhel7.x86_64 1/2 インストール中 : postgresql13-13.5-1PGDG.rhel7.x86_64 2/2 検証中 : postgresql13-13.5-1PGDG.rhel7.x86_64 1/2 検証中 : postgresql13-libs-13.5-1PGDG.rhel7.x86_64 2/2 インストール: postgresql13.x86_64 0:13.5-1PGDG.rhel7 依存性関連をインストールしました: postgresql13-libs.x86_64 0:13.5-1PGDG.rhel7 完了しました!
pg_dumpのバージョンを確認していきます。
$ pg_dump --version pg_dump (PostgreSQL) 13.5
参考URL
- Amazon Linux 2のEPELレポジトリを有効にする
- How To Install PostgreSQL 13 on Amazon Linux 2
- EC2上からpsqlでRDS Aurora(PostgreSQL)に接続するまで
まとめ
Amazon Linux2の標準リポジトリでインストール可能なPostgreSQLのパッケージは、バージョンが結構古かったので驚きました。 前職でもパッケージ追加で割と苦労していたので、備忘として対応方法をブログに残しておきます。
この記事が、どなたかのお役に立てば幸いです。それでは!